﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Entities;
using DAL;

namespace HeThongNhaSach
{
    public partial class frmChamCong : Form
    {
        GeneralRepository<ChamCong> _CCRepo = new GeneralRepository<ChamCong>();
        public NhanVien nv;
        public frmChamCong()
        {
            InitializeComponent();
        }
        /// <summary>
        /// cách tính lương nhân viên
        /// </summary>
        void TinhLuong()
        {
            float luong = (ucChamCong1.mark.Count * nv.LuongCoBan / DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));
            if (nv.TrangThai == "Thử việc")
                luong = luong * (float)0.8;
            luong = (int)luong/1000*1000;
            ucChamCong1.lblConlai.Text = luong.ToString();
            float datt = (ucChamCong1.invi.Count * nv.LuongCoBan / DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));
            if (nv.TrangThai == "Thử việc")
                datt = datt * (float)0.8;
            datt = (int)datt / 1000 * 1000; ;
            ucChamCong1.lblDaTT.Text = datt.ToString();
            ucChamCong1.lblTong.Text = (luong + datt).ToString();
            if (luong > 0)
                ucChamCong1.btnThanhToan.Enabled = true;
            else
                ucChamCong1.btnThanhToan.Enabled = false;
        }
        private void frmChamCong_Load(object sender, EventArgs e)
        {
            this.Text = "Chấm công nhân viên: " + nv.MaNhanVien;
            ucChamCong1.btnNext.Click += new EventHandler(btnNext_Click);
            ucChamCong1.btnPrev.Click += new EventHandler(btnPrev_Click);
            LoadChamCong(nv.MaNhanVien, DateTime.Now.Month, DateTime.Now.Year);
            foreach (Label lbl in ucChamCong1.main)
            {
                lbl.Click += new EventHandler(lbl_Click);
            }
            ucChamCong1.btnThanhToan.Click+=new EventHandler(btnThanhToan_Click);
            TinhLuong();
        }
        /// <summary>
        /// next tới tháng tiếp theo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void btnNext_Click(object sender, EventArgs e)
        {
            ucChamCong1.month = ucChamCong1.month + 1;
            if (ucChamCong1.month == 13)
            {
                ucChamCong1.year = ucChamCong1.year + 1;
                ucChamCong1.month = 1;
            }
            ucChamCong1.ViewLayout();
            LoadChamCong(nv.MaNhanVien, ucChamCong1.month, ucChamCong1.year);
            TinhLuong();
        }
        /// <summary>
        /// quay lại tháng trước
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void btnPrev_Click(object sender, EventArgs e)
        {
            ucChamCong1.month = ucChamCong1.month - 1;
            if (ucChamCong1.month == 0)
            {
                ucChamCong1.year = ucChamCong1.year - 1;
                ucChamCong1.month = 12;
            }
            ucChamCong1.ViewLayout();
            LoadChamCong(nv.MaNhanVien, ucChamCong1.month, ucChamCong1.year);
            TinhLuong();
        }
        /// <summary>
        /// load chấm công
        /// </summary>
        /// <param name="maNV">Mã  nhân viên</param>
        /// <param name="month">Tháng chấm công</param>
        /// <param name="year">Năm chấm công</param>
        private void LoadChamCong(string maNV, int month, int year)
        {
            ucChamCong1.mark.Clear();
            ucChamCong1.invi.Clear();
            List<ChamCong> cc = _CCRepo.Find(t => t.MaNhanVien == maNV && t.NgayChamCong.Month == month && t.NgayChamCong.Year == year).ToList();
            foreach (ChamCong c in cc)
            {
                Label lbl = ucChamCong1.main.Find(t => t.Text == c.NgayChamCong.Day.ToString());
                if (c.DaThanhToan == true)
                    ucChamCong1.invi.Add(lbl);
                else
                    ucChamCong1.mark.Add(lbl);
            }
            ucChamCong1.UpdateColor();
        }
        void lbl_Click(object sender, EventArgs e)
        {
            ChamCong cc = new ChamCong();
            cc.MaNhanVien = nv.MaNhanVien;
            cc.NgayChamCong = DateTime.Parse(ucChamCong1.month + "/" + ((Label)sender).Text + "/" + ucChamCong1.year);
            cc.DaThanhToan = false;
            if (ucChamCong1.invi.Contains((Label)sender) || cc.NgayChamCong > DateTime.Now)
            {
                MessageBox.Show("Không thể cập nhật chấm công cho ngày này");
                return;
            }
            if (!ucChamCong1.mark.Contains((Label)sender))
            {
                ucChamCong1.mark.Add((Label)sender);
                _CCRepo.Insert(cc);
            }
            else
            {
                ucChamCong1.mark.Remove((Label)sender);
                _CCRepo.Delete(cc);
            }
            ucChamCong1.UpdateColor();
            TinhLuong();
        }
       /// <summary>
       /// thanh toán lương cho nhân viên
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
        void btnThanhToan_Click(object sender, EventArgs e)
        {
            DialogResult rs = MessageBox.Show("Sau khi thanh toán lương sẽ không thể cập nhật chấm công cho các ngày đã thanh toán. Muốn thanh toán lương?", "Thanh toán", MessageBoxButtons.YesNo);
                if(rs==DialogResult.Yes)
                {
                    foreach(Label lbl in ucChamCong1.mark)
                    {
                        ChamCong cc=new ChamCong();
                        cc.MaNhanVien = nv.MaNhanVien;
                        cc.NgayChamCong=DateTime.Parse(ucChamCong1.month + "/" + lbl.Text + "/" + ucChamCong1.year);
                        cc.DaThanhToan = true;
                        _CCRepo.Update(cc);
                    }
                    LoadChamCong(nv.MaNhanVien, ucChamCong1.month, ucChamCong1.year);
                    TinhLuong();
                }
        }
    }
}
